#include <vector>
#include <iostream>
using namespace std;
int N,M;
double dp[100010];
struct Edge{int to;int len;};
vector<Edge> G[100010];
double dfs(int P)
{
	if(P==N) return 0;
	else
	{
		double sum=0.0;
		for(int i=0;i<G[P].size();i++)
		{
			//cout<<endl<<P<<","<<G[P][i].to<<","<<dfs(G[P][i].to)<<","<<(double)G[P][i].len<<":"<<(dfs(G[P][i].to)+(double)G[P][i].len)/G[P].size();
			sum+=(dfs(G[P][i].to)+(double)G[P][i].len)/G[P].size();
		}
		//cout<<endl<<P<<":"<<sum;
		return sum;
	}
}
int main()
{
	cin>>N>>M;
	for(int i=0;i<M;i++)
	{
		int temp_from,temp_to,temp_len;
		cin>>temp_from>>temp_to>>temp_len;
		Edge temp_edge;
		temp_edge.len=temp_len;
		temp_edge.to=temp_to;
		G[temp_from].push_back(temp_edge);
	}
	printf("%.2f",dfs(1));

}
